package fr.mma.livraison.controler;

import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import fr.mma.livraison.model.Developpeur;
import fr.mma.livraison.model.DeveloppeurDTO;

public class MainController {

	DevDao devDao = new DevDao();

	private static Map<OrderType, Comparator<Developpeur>> devComparator = new HashMap<OrderType, Comparator<Developpeur>>();
	static {
		devComparator.put(OrderType.NAME, new Comparator<Developpeur>() {
			@Override
			public int compare(Developpeur o1, Developpeur o2) {
				return o1.getName().compareTo(o2.getName());
			}
		});
		devComparator.put(OrderType.LIVRAISON, new Comparator<Developpeur>() {
			@Override
			public int compare(Developpeur o1, Developpeur o2) {
				if (o1.getLastLivraison() < o2.getLastLivraison()) {
					return -1;
				}
				if (o1.getLastLivraison() > o2.getLastLivraison()) {
					return 1;
				}
				return 0;
			}
		});
	}

	public MainController() {
		super();
	}

	public List<Developpeur> getAllDev() {
		return devDao.getAll();
	}

	public Collection<Developpeur> getAllDev(OrderType orderType) {
		List<Developpeur> devList = getAllDev();
		Collections.sort(devList, devComparator.get(orderType));
		return devList;
	}

	public Developpeur getDevByName(String name) {
		for (Developpeur dev : getAllDev()) {
			if (dev.getName().equals(name)) {
				return dev;
			}
		}
		return null;
	}

	public void save(DeveloppeurDTO devDTO){
		Developpeur dev =  devDao.getOrCreate(devDTO.getTrigram());
		dev.setLastLivraison(Factory.build(devDTO.getLastLivraison()));
		dev.setName(devDTO.getTrigram());
		devDao.save(dev);
	}
	
	public void save(Collection<DeveloppeurDTO> devDTOList){
		for (DeveloppeurDTO devDTO : devDTOList) {
			save(devDTO);
		}
	}
}
